8.真值表
在前面的练习中,我们使用了简单的逻辑门以及多个逻辑门的组合。这些电路是组合电路的例子。组合(Combinational)意味着电路的输出仅仅是其输入值的函数(数学意义上的)。这意味着对于任何给定的输入值,只有一个可能的输出值。因此,描述组合功能行为的一种方法是明确列出每个输入值对应的输出应该是什么。这就是真值表。
对于一个具有N个输入的布尔函数,有2N种可能的输入组合。真值表的每一行都列出了一个输入组合,因此总共有2N行。输出列显示了对于每个输入值,输出应该是多少。
Row | Inputs | Outputs |
---|---|---|
number | x3 x2 x1 | f |
0 | 0 0 0 | 0 |
1 | 0 0 1 | 0 |
2 | 0 1 0 | 1 |
3 | 0 1 1 | 1 |
4 | 1 0 0 | 0 |
5 | 1 0 1 | 1 |
6 | 1 1 0 | 0 |
7 | 1 1 1 | 1 |
上述真值表是一个三输入一输出函数的示例。它有8行,对应8种可能的输入组合,以及一个输出列。有四种输入组合使得输出为1,另外四种使输出为0。
从真值表合成电路
假设我们想构建上述电路,但只能使用标准逻辑门的集合。你如何构建任意逻辑功能(以真值表形式表示)?
创建一个实现真值 表功能的电路的一个简单方法是将该功能表达为乘积之和形式。乘积(意味着AND)之和(意味着OR)意味着对真值表的每一行使用一个N输入的与门(用于检测输入是否匹配每一行),随后使用或门选择仅导致输出为'1'的那些行。
对于上面的例子,如果输入匹配第2行、第3行、第5行或第7行,则输出为'1'(这是一个四输入或门)。如果输入匹配第2行,则x3=0且x2=1且x1=0(这是一个三输入与门)。因此,这个真值表可以用规范形式实现,即使用四个与门并用或门连接起来。
实践练习
创建一个组合电路来实现上述真值表。
模块声明
module top_module(
input x3,
input x2,
input x1, // three inputs
output f // one output
);